/*
leetcode 54
给你一个 m 行 n 列的矩阵 matrix ，请按照 顺时针螺旋顺序 ，返回矩阵中的所有元素。
输入：matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出：[1,2,3,6,9,8,7,4,5]

解释：
        1  2  3
        4  5  6
        7  8  9

输入：matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出：[1,2,3,4,8,12,11,10,9,5,6,7]

解释：
        1   2   3   4
        5   6   7   8
        9   10  11  12

*/
#include<bits/stdc++.h>
using namespace std;
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> ans;
       if(matrix.empty()) return ans;
       int u=0;
       int d=matrix.size()-1;
       int l=0;
       int r=matrix[0].size()-1;
       while(true){
           //从左到右
       		for(int i=l;i<=r;i++) ans.push_back(matrix[u][i]);
       		if(++u>d) break;
            //从上到下
       		for(int i=u;i<=d;i++) ans.push_back(matrix[i][r]);
       		if(--r<l) break;
            //从右到左
       		for(int i=r;i>=l;i--) ans.push_back(matrix[d][i]);
       		if(--d<u) break;
            //从下到上
       		for(int i=d;i>=u;i--) ans.push_back(matrix[i][l]);
       		if(++l>r) break;
			   
		   }
		return ans;
    }
};